package br.com.sis.rh.action;

import java.util.ArrayList;
import java.util.List;

import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.ehcache.EhCacheCacheManager;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import br.com.sis.rh.entity.Candidato;
import br.com.sis.rh.entity.Segmento;
import br.com.sis.rh.enums.CamposAbasEnum;
import br.com.sis.rh.facade.CandidatoFacade;
import br.com.sis.rh.facade.SegmentoFacade;
import br.com.sis.rh.util.ExpectativaProfissionalAux;
import br.com.sis.rh.vo.RetornoAjaxVO;

@Controller
@Scope("request")
@ParentPackage("json-default")
@Namespace(value = "/")
public class SegmentoAction extends ComumAuxAction implements ComumAction {

    @Autowired
    private EhCacheCacheManager ehCache;
	
	@Autowired
	private SegmentoFacade segmentoFacade;
	
	@Autowired
	private CandidatoFacade candidatoFacade;
	
	@Autowired
	private ExpectativaProfissionalAux expectativaProfissionalAux;
	
	private Candidato candidato;
	
	private String segmentos;
	
	private RetornoAjaxVO retornoAjax;
	
	@Override
	public String incluir() {
		return null;
	}

	@Override
	public String alterar() {
		return null;
	}

	@Override
	public String excluir() {
		return null;
	}

	@SuppressWarnings("unchecked")
	@Override
	@Action(value="listarSegmento", results={
			@Result(name="success", type="json", params={"root","retornoAjax"})
	})
	public String listar() {
		retornoAjax = new RetornoAjaxVO();
		
		List<Segmento> segmentoCache = new ArrayList<>();
		
		if(ehCache.getCache("segmento").get("1") != null) {
			segmentoCache = (ArrayList<Segmento>) ehCache.getCache("segmento").get("1").get();
		} else {
			segmentoCache = segmentoFacade.listar(new Segmento());
			ehCache.getCache("segmento").put("1", segmentoCache);
		}		
		
		retornoAjax.setObjetoRetornado(segmentoCache);
		
		return SUCCESS;
	}
	
	@Action(value="incluirSegmentoCandidato", results={
			@Result(name="success", type="json", params={"root","retornoAjax"})
	})
	public String incluirSegmentoCandidato() {
		retornoAjax = new RetornoAjaxVO();
		
		montaSegmentos();
		
		candidatoFacade.incluirSegmentos(candidato);
		
		Candidato candidatoSegmento = candidatoFacade.recuperarObjetoPorID(candidato);

		candidatoSegmento.setPorcentagemPreenchidaExpectativa(calculaPorcentagemPreenchida(CamposAbasEnum.TOTAL_CAMPOS_EXPECTATIVA.getQuantidadeCampos(), expectativaProfissionalAux.atributosPreenchidos(candidatoSegmento)));
		
		retornoAjax.setObjetoRetornado(candidatoSegmento);
		retornoAjax.setStatusOperacao(SUCCESS);
		
		return SUCCESS;
	}
	
	private void montaSegmentos() {
		String [] segmentosSplit = segmentos.split(",");
		
		for(String segmentoId : segmentosSplit) {
			Segmento segmento = new Segmento();
			segmento.setId(Integer.valueOf(segmentoId));
			candidato.getSegmento().add(segmento);
		}
	}

	public SegmentoFacade getSegmentoFacade() {
		return segmentoFacade;
	}

	public void setSegmentoFacade(SegmentoFacade segmentoFacade) {
		this.segmentoFacade = segmentoFacade;
	}

	public RetornoAjaxVO getRetornoAjax() {
		return retornoAjax;
	}

	public void setRetornoAjax(RetornoAjaxVO retornoAjax) {
		this.retornoAjax = retornoAjax;
	}

	public String getSegmentos() {
		return segmentos;
	}

	public void setSegmentos(String segmentos) {
		this.segmentos = segmentos;
	}

	public Candidato getCandidato() {
		return candidato;
	}

	public void setCandidato(Candidato candidato) {
		this.candidato = candidato;
	}
}
